Asynchronous Web Service ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের একটি বিশেষ পদ্ধতি যেখানে ক্লায়েন্ট সার্ভিস কল করার পর অপেক্ষা না করে অন্যান্য কাজ করতে পারে। ওয়েব সার্ভিসের কাজ সম্পন্ন হলে, সার্ভার ক্লায়েন্টকে একটি রেসপন্স পাঠায়। Apache CXF এই ধরনের অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিস কনফিগার এবং ইমপ্লিমেন্ট করার জন্য একটি শক্তিশালী ফ্রেমওয়ার্ক প্রদান করে।
এখানে আমরা একটি সিম্পল অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের উদাহরণ দেখব, যেখানে সার্ভিসটি একটি অ্যাসিঙ্ক্রোনাস মেথড ব্যবহার করবে এবং ক্লায়েন্ট তার ফলাফল একবার পেলে সেই অনুযায়ী কাজ করবে।
1. Asynchronous Web Service Endpoint (Server Side)
এখানে একটি ওয়েব সার্ভিসের উদাহরণ দেওয়া হচ্ছে যা একটি অ্যাসিঙ্ক্রোনাস মেথড প্রক্রিয়া করবে:
1.1 Web Service Implementation
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.cxf.async.AsyncHandler;
@WebService
public class AsyncHelloWorldService {
@WebMethod
public String sayHello(String name) {
// সাধারণ ওয়েব সার্ভিস মেথড
return "Hello, " + name;
}
@WebMethod
public void asyncSayHello(String name, AsyncHandler<String> asyncHandler) {
// অ্যাসিঙ্ক্রোনাস মেথড - কল করার পর, কলব্যাক হ্যান্ডলারকে রেসপন্স পাঠানো হবে
String response = "Hello, " + name;
asyncHandler.handleResponse(new AsyncResponse<>(response)); // এখানে AsyncResponse ব্যবহার করে ফলাফল প্রেরণ
}
}
এখানে, asyncSayHello মেথডটি অ্যাসিঙ্ক্রোনাসভাবে কাজ করে এবং যখন কাজ সম্পন্ন হবে, তখন সেই রেসপন্সকে AsyncHandler ব্যবহার করে ক্লায়েন্টের কাছে পাঠানো হবে।
1.2 Server Configuration
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class HelloWorldAsyncServer {
public static void main(String[] args) {
AsyncHelloWorldService implementor = new AsyncHelloWorldService();
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(AsyncHelloWorldService.class);
factory.setAddress("http://localhost:8080/asyncHello");
factory.create();
}
}
এখানে, JaxWsServerFactoryBean ব্যবহার করে ওয়েব সার্ভিসটি শুরু করা হয়েছে এবং অ্যাসিঙ্ক্রোনাস সাপোর্ট সহ asyncSayHello মেথড তৈরি করা হয়েছে।
2. Asynchronous Web Service Client (Client Side)
এখন, আমরা ক্লায়েন্ট সাইডে অ্যাসিঙ্ক্রোনাস কল করার উদাহরণ দেখব যেখানে AsyncResponseCallback ব্যবহৃত হবে।
2.1 Asynchronous Client
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.async.AsyncResponseCallback;
import org.apache.cxf.message.Message;
public class AsyncHelloWorldClient {
public static void main(String[] args) {
// ক্লায়েন্ট তৈরি
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(AsyncHelloWorldService.class);
factory.setAddress("http://localhost:8080/asyncHello");
AsyncHelloWorldService helloWorld = (AsyncHelloWorldService) factory.create();
// অ্যাসিঙ্ক্রোনাস কলের জন্য CallBack হ্যান্ডলার সেট করা
helloWorld.asyncSayHello("John", new AsyncResponseCallback() {
@Override
public void handleResponse(Message message) {
String response = (String) message.getContent(String.class);
System.out.println("Received Async Response: " + response); // এখানে রেসপন্স প্রিন্ট করা হবে
}
@Override
public void handleFault(Message message) {
System.out.println("Async Fault: " + message);
}
});
// অন্য কাজ করা যেতে পারে
System.out.println("Async call is in progress...");
}
}
এখানে asyncSayHello মেথডটি অ্যাসিঙ্ক্রোনাসভাবে কল করা হচ্ছে এবং AsyncResponseCallback ব্যবহার করে রেসপন্স বা ত্রুটি হ্যান্ডলিং করা হচ্ছে। handleResponse মেথডটি ক্লায়েন্টের কাছে রেসপন্স পৌঁছানোর পর কল হবে, যেখানে আমরা প্রাপ্ত রেসপন্স প্রিন্ট করব। ত্রুটির ক্ষেত্রে handleFault মেথডটি কল হবে।
3. Async Call Execution Flow
- Client sends request: ক্লায়েন্ট
asyncSayHelloমেথডটি অ্যাসিঙ্ক্রোনাসভাবে কল করে। সার্ভিসে এই মেথডটি রিসিভ হওয়ার পর কার্যক্রম শুরু হবে। - Server processes request: সার্ভার অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করবে এবং পরে রেসপন্স প্রদান করবে। সার্ভার
AsyncHandlerব্যবহার করে রেসপন্সটি ক্লায়েন্টকে পাঠাবে। - Client receives response: ক্লায়েন্ট
AsyncResponseCallbackএর মাধ্যমে রেসপন্স প্রাপ্তি নিশ্চিত করবে এবং সেই অনুযায়ী কাজ করবে।
4. Advantages of Asynchronous Web Services
- Non-blocking: অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসগুলো ক্লায়েন্টকে ব্লক না করে অন্য কাজ করার সুযোগ দেয়।
- Improved Performance: সময়সাপেক্ষ এবং বড় অ্যাপ্লিকেশন পারফরম্যান্সের জন্য অ্যাসিঙ্ক্রোনাস কলগুলো কার্যকরী হয়।
- Scalability: অ্যাসিঙ্ক্রোনাস সার্ভিস কলের মাধ্যমে সিস্টেমের স্কেলেবিলিটি উন্নত হয়, কারণ সার্ভিস কলগুলো সিংক্রোনাস কলের তুলনায় দ্রুত হ্যান্ডল করা যায়।
সারাংশ
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং স্কেলেবল কমিউনিকেশন সম্ভব হয়। Apache CXF এই ধরনের ওয়েব সার্ভিস বাস্তবায়ন করতে অত্যন্ত কার্যকরী ফিচার প্রদান করে। AsyncHandler এবং AsyncResponseCallback ব্যবহার করে ওয়েব সার্ভিসের পারফরম্যান্স এবং কার্যকারিতা বৃদ্ধি করা সম্ভব।
Read more